草庐IT

Java Iterator(迭代器)

全部标签

c++ - 前向迭代器的多遍保证强度

考虑标准中前向迭代器的定义(草案n4659,[forward.iterators]/27.2.5):AclassorpointertypeXsatisfiestherequirementsofaforwarditeratorifXsatisfiestherequirementsofaninputiterator(27.2.3),XsatisfiestheDefaultConstructiblerequirements(20.5.3.1),IfXisamutableiterator,referenceisareferencetoT;ifXisaconstantiterator,refer

c++ - 为什么 gcc-4.9.2 不支持 std::string.insert(iterator, range) 返回迭代器

根据cppreference,C++11应该支持:templateiteratorinsert(const_iteratorpos,InputItfirst,InputItlast);但是当我尝试使用g++4.9.2编译以下代码时:std::stringstr{"helloworld"},addition{"hmy"};autoiter=str.erase(str.begin(),str.begin()+4);iter=str.insert(next(iter),addition.begin(),addition.end());//Error我收到以下错误(liveexample):e

c++ - 迭代封装的嵌套 STL 容器

这是一个相当正常的STL容器封装,它允许Cfoo的用户在不允许更改内部结构的情况下迭代容器。#includeclassCfoo{public:classCbar{/*contentsofCbar*/};typedefstd::vectorTbarVector;typedefTbarVector::const_iteratorconst_iterator;public:const_iteratorbegin()const{return(barVector_.begin());}const_iteratorend()const{return(barVector_.end());}priva

c++ - 测试 C++ 迭代器

我正在为自定义数组类型编写C++RandomAccessIterator。由于它不适用于std::sort和一个简单的int数组,我想确保我已正确实现它。Doyouknowofany"iteratorconformancetesting"frameworkoutthere?我已经实现了所有可能的函数或operator,一切似乎都是正确的,但我仍然遗漏了一些东西,因为sort()取消了对array::end()的引用 最佳答案 Boost.Iterator-库包含用于概念检查的类。 关于c

c++ - 包装 STL vector 并更改其迭代器的行为

有这样的代码:#include#includetemplateclassA{public:classiterator:publicstd::vector::iterator{public:T&operator*(){??}};iteratorbegin(){returnv.begin();//error}iteratorend(){returnv.end();//error}voidadd(constT&elem){v.push_back(elem);}private:std::vectorv;};intmain(){Aa;a.add(2);a.add(4);for(A::iterat

c++ - 如何迭代 128 位 block 中的字符串?

我有一个函数可以对来自任意长度字符串的128位数据block进行操作。如果字符串不能均匀地分成128位的block,它将被相应地填充。目的是转换输入函数的字符串中的数据。我最初想到的是这样遍历字符串://Thismighthavestupiderrors.Hopefullyitstillggetsthepointacross.for(inti=0;i我想这可行,但我认为必须有更优雅的方法来做到这一点。我想到的一个想法是将strn封装在一个类中,并实现我自己的迭代器,该迭代器可以以128位block的形式读取其内容。这很吸引人,因为构造函数可以处理填充,并且我当前使用的一些函数可以设为私

c++ - 移动到容器中的迭代器

我有一个类,其中包含一个容器,以及一个指向该容器的迭代器。如何正确实现移动构造函数?我似乎记得按照标准,您不能依赖迭代器在移动后仍然有效(这太愚蠢了)。有没有什么方法可以让我“更新”迭代器(如果它失效了)?或者我是否必须动态分配容器、移动它,然后让迭代器以这种方式保持有效? 最佳答案 更新:使用std::unique_ptr作为容器的持有者是规范的通用解决方案——简单地不要移动容器,只是转移所有权和交换迭代器。正如您已经说过的,您可以将其作为优化的特殊情况,尽管我希望通用解决方案也非常有效,并且我只会在证明它是真实的之后才接受代码的

c++ - 使用反向迭代器插入到 std::list 会更改原始反向迭代器的值

在网上搜索了很多,都没有找到问题的答案。我正在使用reverse_iterator向std::list插入一个值。虽然插入发生在预期的适当位置,但我注意到用于插入的原始reverse_iterator的值发生了变化。完全不相关的reverse_iterator的值也发生了变化。我已经能够在一个简单的例子中重现这一点#include#include#includeintmain(){//Creatingalistofvalues1,2,4,5std::listmyList;myList.push_back(1);myList.push_back(2);myList.push_back(4

c++ - 与 at() 或索引相比,为什么使用 C++ 迭代器会显着增加代码大小?

我一直在考虑在嵌入式系统(16KBSRAM和64KB闪存,CortexM4)上使用更新的C++语言功能,例如迭代器,但遇到了令人惊讶的障碍。为什么迭代器如此庞大?我的印象是它们基本上是一些指针运算或索引。STL是否引入了一些意外代码?这些是在Windows上使用KinetisDesignStudio和来自here的gcc-arm-none-eabi-4_9工具链使用以下标志。arm-none-eabi-g++-mcpu=cortex-m4-mthumb-mfloat-abi=hard-mfpu=fpv4-sp-d16-Os-fmessage-length=0-fsigned-char-

c++ - 数据类型不完整的容器的迭代器是否合法?

下面的代码合法吗?classA{std::map::iteratorx;};VisualStudio2015接受它,但clang说.../ndk/sources/cxx-stl/llvm-libc++/libcxx/include/utility:254:9:error:fieldhasincompletetype'A'_T2second;^....a.cpp:52:21:note:definitionof'A'isnotcompleteuntiltheclosing'}'structA^编辑:问题似乎与标准库有关,http://rextester.com/QNNEG57036失败了我